首页
首页

django通过缓存来实现 访问统计

####整体思路
用户访问时,获取到用户IP地址,并将ip地址与访问的文章ID存入到cache中,并设定时间5*60。

当用户再次访问 获取到用户ip 并对比cahe表中是否存在该ip和文章id,如果存在访问数不变,不存在+=1.

1、获取用户IP地址:

1
2
3
4
5
6
####################获取IP地址########################
if 'HTTP_X_FORWARDED_FOR' in request.META:
ip = request.META['HTTP_X_FORWARDED_FOR']
else:
ip = request.META['REMOTE_ADDR']
####################获取IP地址########################

2、将用户ip与文章id组成一个字符串

1
ip_id = ip + str(post_id)  # 设定 ip地址加上文章id组成唯一的一个值

3、判断用户ip与文章id组成的字符串是否在cache中

1
2
3
ip_id = ip + str(post_id)  # 设定 ip地址加上文章id组成唯一的一个值
online_ip_id = cache.get('online_ip_id', []) # 读取 cache中的标识数据
if ip_id not in online_ip_id: # 判断 chache中是否包含 ip_id

3、如果不存在,将用户ip与文章id组成的字符串存到cache中并设定时间,并将views+=1

1
2
3
4
5
6
online_ip_id = online_ip_id + "," + ip_id  # 设定新的 online_ip_id
cache.set("online_ips", online_ip_id, 5 * 60) # 将新的online_ip_id存入到cache中 并设定时间为5分钟 写成5*60 为了好看易读
num = int(content.count)
num += 1
content.count = str(num)
content.save()

4、ok完成。

最后效果就是:用户在5分钟内访问同一篇文章文章访问数只会加1.

支持一下
扫一扫,我会更有动力更新
  • 微信扫一扫
  • 支付宝扫一扫